package com.yf.repo.modules.repo.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yf.repo.modules.qu.dto.QuDTO;
import com.yf.repo.modules.qu.dto.request.QuQueryReqDTO;
import com.yf.repo.modules.repo.dto.ext.RepoDetailDTO;
import com.yf.repo.modules.repo.dto.ext.RepoTypeCountDTO;
import com.yf.repo.modules.repo.dto.request.RepoReqDTO;
import com.yf.repo.modules.repo.dto.response.LevelGroupDTO;
import com.yf.repo.modules.repo.dto.response.TypeGroupDTO;
import com.yf.repo.modules.repo.entity.Repo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 题库Mapper
 * </p>
 *
 * @author 聪明笨狗
 * @since 2020-05-25 13:23
 */
public interface RepoMapper extends BaseMapper<Repo> {

    /**
     * 分页查询题库
     *
     * @param page
     * @param query
     * @return
     */
    IPage<RepoDetailDTO> paging(Page page, @Param("query") RepoReqDTO query);

    /**
     * 分页查询题库（学员端）
     *
     * @param page
     * @param query
     * @return
     */
    IPage<RepoDetailDTO> userPaging(Page page, @Param("query") RepoReqDTO query);

    /**
     * 查找详情
     *
     * @param id
     * @return
     */
    RepoDetailDTO detail(@Param("id") String id);

    /**
     * 根据题型统计题目数量
     *
     * @param query
     * @return
     */
    List<TypeGroupDTO> findTypeGroup(@Param("query") QuDTO query);

    /**
     * 查找难度分组列表
     *
     * @param query
     * @return
     */
    List<LevelGroupDTO> findLevelList(@Param("query") QuQueryReqDTO query);

    /**
     * 查找未分章节的题目类型分组
     *
     * @param query
     * @return
     */
    List<LevelGroupDTO> findNullChapterList(@Param("query") QuQueryReqDTO query);

    /**
     * 按题库ID统计各题型数量（用于RepoDetailDTO.typeList）
     *
     * @param id 题库ID
     * @return 各题型计数列表
     */
    List<RepoTypeCountDTO> findTypeList(@Param("id") String id);

    /**
     * 批量查询多个题库的题型统计（优化N+1查询）
     *
     * @param repoIds 题库ID列表
     * @return 题型统计映射，key为题库ID，value为该题库的题型统计列表
     */
    List<RepoTypeCountDTO> findTypeListBatch(@Param("repoIds") List<String> repoIds);
}
